package list;

import org.junit.Test;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

/**
 * Set集合是Collection集合子接口
 * Set集合接口:无序,无下标,元素不可重复[唯一性]
 * Set集合使用方法与Collection集合方法使用一致
 * add() remove() contains() size() clear()
 * 使用Iterstor迭代器遍历
 * Set集合--接口--无法创建对象--实现类
 * HashSet:由哈希算法实现,不保证元素顺序,不允许元素重复,可以存null
 * LinkedHashSet:[方法与Hashset一致],由哈希算法实现,保持元素顺序
 *              不允许元素重复,可以存null
 * TreeSet[算法:红黑树]:不可以存null,按照元素自然顺序或者指定比较器进行元素储存,不允许元素重复
 */
public class SetAPI {
    @Test
    public void testSet(){
        Set<String>set=new HashSet<>();
        set.add("蒸鹿尾"); set.add("蒸羊羔");
        set.add("烧花鸭"); set.add("烧子鹅");
        set.add("烧花鸭"); set.add(null); set.add(null);
        System.out.println("Set集合:"+set);
        Boolean b=set.contains("烧花鸭");
        System.out.println("判断Set集合是否存在[烧花鸭]元素"+b);
        System.out.println("判断集合长度:"+set.size());
        //Iterator遍历 Set 集合 元素
        //1.通过Set集合调用iterator()获取迭代器实例
        Iterator<String> it=set.iterator();

        //2.遵循:问,取,删 删掉"烧子鹅"元素
        while (it.hasNext()){//问:set集合有没有元素---有:true
            String str=it.next();//取:set集合元素
            //null 引用类型默认值 不是字符串
            //判断明确的值 必须 ==
            //判断对象 使用  "字符串".equals(str)  实值
            //             obj.equal(add) 地址值
            if("烧子鹅".equals(str)){//如果"烧子鹅"等于"烧子鹅"元素
                it.remove();//删
            }
        }

    }
}
